from django.contrib import admin
from universidades.models import Region, Universidad, Pais_region


class UniversidadAdmin(admin.ModelAdmin):

    def queryset(self, request):
        """ Filtrar las universidades por region correspondiente al adm.
        regional. Filtrar universidades por adm. institucional """

        qs = super(UniversidadAdmin, self).queryset(request)
        user = request.user

        if user.groups.filter(name='Adm. Regional').exists():
            region = Region.objects.filter(administrador=user.id)
            qs = qs.filter(region=region)
        elif user.groups.filter(name='Adm. Institucional').exists():
            qs = Universidad.objects.filter(administrador=user.id)

        return qs

    def get_form(self, request, obj=None, **kwargs):
        user = request.user

        """ El campo region no aparece para el Adm. Regional
        se completa automaticamente con la region que este
        administra """

        groups = user.groups
        cant_edit_region = groups.filter(name='Adm. Regional').exists(
        ) or groups.filter(name='Adm. Institucional').exists()

        if cant_edit_region:
            self.exclude = ('region',)
        else:
            self.exclude = ()

        return super(UniversidadAdmin, self).get_form(request, obj=None, **kwargs)

    def save_form(self, request, form, change):
        """ Si el usuario logueado es un Adm. Regional se completa
        automaticamente el campo region en el formulario """

        obj = super(UniversidadAdmin, self).save_form(request, form, change)
        user = request.user

        if user.groups.filter(name='Adm. Regional').exists():
            if not change:
                # Presentar un error cuando se loguea un adm. regional que
                # no tiene una region asociada
                obj.region = Region.objects.get(administrador=user.id)

        return obj

admin.site.register(Pais_region)
admin.site.register(Region)
admin.site.register(Universidad, UniversidadAdmin)
